package com.zkzx.operation.api.config;

import com.alibaba.fastjson.JSONException;
import com.alibaba.fastjson.JSONObject;
import com.zkzx.common.exception.BaseException;
import com.zkzx.common.global.Global;
import feign.Response;
import feign.Util;
import feign.codec.ErrorDecoder;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.springframework.context.annotation.Configuration;

/**
 * @author young Email:yanghui@zkraising.com
 * @description
 * @company 北京中科智兴物联科技有限公司 @版权所有
 * @since 2021年04月30日 18时19分
 */
@Configuration
@Slf4j
public class FeignClientErrorDecoder implements ErrorDecoder {

    @SneakyThrows
    @Override
    public Exception decode(String methodKey, Response response) {
        // 这里直接拿到我们抛出的异常信息
        String message = Util.toString(response.body().asReader());
        log.error("调用服务异常错误信息：{}",message);
        try {
            JSONObject jsonObject = JSONObject.parseObject(message);
            String messageStr = jsonObject.getString("message");
            String[] split = messageStr.split(":");
            throw  new BaseException(Integer.parseInt(split[0]),split[1]);
        } catch (JSONException e) {
            log.error("获取异常信息失败");
        }
        return new Exception(response.status() + Global.SEPERATOR + message);
    }
}